<?php
/**
 * Ora Mysql 操作类
 * @author lan7
 * @since 2010-11-22 00:02
 * @copyright lan7.net
 * @version 1.0
 */
class db_mysql extends base{

	/**
	 * 数据库操作句柄
	 *
	 * @var unknown_type
	 */
	var $lnk;

	/**
	 * 架构函数
	 *
	 */
	function __construct(){}

	/**
	 * 数据链接
	 *
	 * @return unknown
	 */
	function connect(){
		$this->lnk = @mysql_connect($GLOBALS["ora_cfg"]['db_host'],$GLOBALS["ora_cfg"]['db_user'], $GLOBALS["ora_cfg"]['db_passwd']);
		if(!$this->lnk){
			if($GLOBALS['RUN_MODEL']>0){//运行模式...
				return false;
			}else{//调试模式
				throwException("数据库连接失败,请检查配置信息!",__FILE__,__LINE__);
			}
		}
		// 选择目标数据库
		$rs = mysql_select_db($GLOBALS["ora_cfg"]['db_name']);
		if(!$rs){
			if($GLOBALS['RUN_MODEL']>0){
				return false;
			}else{
				throwException("未能连接到指定的数据库,请检查配置文件!",__FILE__,__LINE__);
			}
		}
		// 设置编码
		@mysql_query("SET NAMES '".$GLOBALS["ora_cfg"]["db_encoding"]."'");
	}

	/**
	 * 获取Mysql错误编码
	 *
	 * @return unknown
	 */
	function db_errno() {
		return mysql_errno();
	}

	/**
	 * 获取Mysql错误信息
	 *
	 * @return unknown
	 */
	function db_error() {
		return mysql_error();
	}
	/**
	 * 获取一条记录
	 *
	 * @param unknown_type $sql
	 * @return unknown
	 */
	function getOne($sql){
		$rs = $this->query($sql, $this->lnk);
		if($rs){
			return $this->fetch_array($rs);
		}
		return false;
	}
	function addNew($sql){
		$this->execute($sql);
		return $this->getLastInsId();
	}

	/**
	 * 执行SQL并返回结果
	 *
	 * @param String $sql
	 * @return Array
	 */
	function getAll($sql) {
		$query = $this->query($sql);
		$arr = array();
		while (@$row = mysql_fetch_array($query,MYSQL_ASSOC)) {
			$arr[] = $row;
		}
		return $arr;
	}

	/**
	 * 执行SQL
	 *
	 * @param String $sql
	 * @return handel
	 */
	function query($sql){
		if(!$this->lnk){
			// 连接数据库服务器
			$this->connect();
		}
		$this->exec_count();//记录查询次数
		if(mysql_errno()){
			$this->sqlLog(mysql_info());//日志记录
			if($GLOBALS['RUN_MODEL']>0){
				//运行模式下,清除错误消息.
				@mysql_query("SET NAMES '".$GLOBALS["ora_cfg"]["db_encoding"]."'",$this->lnk);
			}else{
				//调试模式下,抛出异常
				throwException( "SQL语句执行失败: ".mysql_errno().", ".mysql_error(),__FILE__,__LINE__);
			}
		}
		return mysql_query($sql,$this->lnk);
	}

	/**
	 * 统计
	 *
	 * @param String $sql
	 * @return Integer
	 */
	function count($sql){
		$rs = $this->query($sql);
		$rs =  @mysql_fetch_row($rs);
		return $rs[0];
	}

	/**
	 * 日志记录
	 *
	 * @param String $sql
	 * @return boolean
	 * @todo 
	 */
	function sqlLog($sql){
		//		if(C("SQL_Log")){
		//			import("UserLib.NRLog");
		//			NRLog::wSQL($sql);
		//		}
		return false;
	}

	/**
	 * 执行次数统计
	 *
	 */
	function exec_count(){
		$GLOBALS["__QUERY__"]++;
	}

	/**
	 * 执行SQL
	 *
	 * @param String $sql
	 * @return handel
	 */
	function execute($sql) {
		return $this->query($sql);
	}

	/**
	 * 获取新增记录的ID
	 *
	 * @return Intger
	 */
	function getLastInsId() {
		$this->exec_count();
		return mysql_insert_id();
	}

	/**
	 * 返回集合记录数
	 *
	 * @param handel $rs
	 * @return Integer
	 */
	function num_rows($rs){
		return mysql_num_rows($rs);
	}

	/**
	 * 返回一条结果
	 *
	 * @param unknown_type $rs
	 * @return unknown
	 */
	function fetch_array($rs){
		return  mysql_fetch_array($rs, MYSQL_ASSOC);
	}

	/**
	 * 释放结果集
	 *
	 * @param handel $rs
	 */
	function free_result($rs=null){
		@mysql_free_result($rs);
	}

	/**
	 * 析构函数 释放资源
	 *
	 */
	function __destruct(){
//		$this->free_result();
//		@mysql_close($this->lnk);
	}

}
?>